home *** CD-ROM | disk | FTP | other *** search
- /* PATH.C commands that deal with paths are in here */
-
- #include "shell.h"
-
- /* SETPATH set the current path and default drive. This is needed on the
- * ST for shell programs that expand wildcards incorrectly when given
- * a command line which requests a drive other than the default. The
- * command also uses the aliases listed above. Bound to CTLX-D.
- */
- setpath(f, n)
- int f, n;
- {
- register char *ptr;
- extern char *index(),*alias();
- char template[MAXINPUT+1];
- char subdir[MAXINPUT+1]; /* handle multiple path */
-
- if (n == 0)
- {
- f = (int)Dgetdrv();
- Dgetpath(path,(f+1));
- mlwrite("Default drive: %c: Default path: %s",(f + 'A'),path);
- return(TRUE);
- }
- mlreply("New drive and path: ",template,MAXINPUT-1);
- if (template[0] == '~') /* use alias if possible */
- {
- if ((ptr=index(template,' '))!=(char *)NULL)
- *ptr = '\0';
- if ((ptr=index(template,'\t'))!=(char *)NULL)
- *ptr = '\0';
- if ((ptr=index(template,'\\'))!=(char *)NULL)
- {
- *ptr = '\0';
- ++ptr;
- strcpy(subdir,ptr);
- n = 0;
- }
- if (alias(&path[0],&template[1]) == (char *)NULL)
- return(FALSE);
- if (n==0)
- strcat(path,subdir);
- }
- else
- strcpy(path,template);
- if ((ptr=index(path,':'))!=(char *)NULL)
- {
- --ptr;
- f = (int)toupper(*ptr);
- if (f < 'A' || f > 'P')
- {
- mlwrite("Illegal drive specification %c:",f);
- return(FALSE);
- }
- f -= 'A';
- Dsetdrv(f);
- }
- Dsetpath(path);
- return(TRUE);
- }
-
- /* look up the string template in the known aliased names. If it's a
- * known alias, copy the actual path into dirpath and return a pointer
- * to dirpath. If it is not legit, complain and return NULL. Called
- * by any command that looks at a file on disk.
- */
- char *
- alias(dirpath, template)
- register char *dirpath;
- register char *template;
- {
- register ALITAB *apt;
-
- apt = aheadp;
- if (apt == NULL)
- {
- mlwrite("No aliases defined");
- return((char *)NULL);
- }
- while (apt)
- {
- if (strcmp(template,apt->alias)==NULL)
- {
- strncpy(dirpath,apt->value,MAXINPUT);
- return(dirpath);
- }
- apt=apt->a_forw;
- }
- return((char *)NULL);
- }
-